package com.cskaoyan.javase.basic._5operator;

/**
 * 三目（ternary）运算符，也被称之为三元运算符，即指的是需要三个操作数的运算符。
 * 它的语法是：
 * (条件表达式) ? 表达式1 : 表达式2;
 *
 * 根据条件表达式的结果:
 *      true: 执行表达式1
 *      false: 执行表达式2
 * 由于三目运算符组成的运算表达式,最终一定会执行某个表达式
 * 所以三目运算符最重要的特点是: 有结果
 *
 * 和if...else比较:
 * 只要能够用三目运算符,就一定能用if...else
 * 但是if...else没有限制必须有结果,所以if...else的使用场景更广
 *
 * 总结:
 *      开发中,如果能够用三目运算符,就尽量用
 *          因为它语法更简洁,效率更高
 *      但实际上,开发中很多场景是用不了三目运算符的
 *
 * 代码的可读性,代码易于理解,它往往是和代码简洁冲突的
 * 代码越简洁,往往就越不容易理解
 * 但是代码过于复杂,啰嗦,肯定也不行
 * 所以写代码,要在代码简洁和可读性之间寻找平衡
 *
 * @since 10:53
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo2 {
    public static void main(String[] args) {
        // 求两个数的最大值
        int num1 = 1000;
        int num2 = 200;
        // Condition 'num1 > num2' is always 'false'
        System.out.println((num1 > num2) ? num1 : num2);
        int result = (num1 > num2) ? num1 : num2;
        System.out.println(result);

        // 求两个数的最大值,但是要求直接打印最大值
        // (num1 > num2) ? sout : sout
        if (num1 > num2) {
            System.out.println(num1);
        } else {
            System.out.println(num2);
        }

        // 求三个数的最大值
        int num3 = 300;
        // 以下表达式,可读性是有影响的,但总体上影响不大,然后又比较简洁,可以使用
        // int max = (num1 > num2) ? ((num1 > num3) ? num1 : num3): ((num2 > num3) ? num2 : num3);
        // 上述拆开写
        int temp = (num1 > num2) ? num1 : num2;
        int max = (temp > num3) ? temp : num3;
        System.out.println(max);
    }
}
